﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PortalCurriculo.Domain;

namespace PortalCurriculo.MvcWebUI.Controllers
{
    public class CargoController : Controller
    {
        public ActionResult Selecionar(int? idCargo = null)
        {
            PreencherViewBag(idCargo);
            return PartialView();
        }

        public ActionResult ListarEspecializacoesAreas(int idArea)
        {
            var especializacoes = new EspecializacaoArea { IdArea = idArea }.SelecionarLista();
            var cargos = new Cargo { IdEspecializacaoArea = especializacoes.First().Id }.SelecionarLista();

            return Json(new
            {
                success = true,
                cargos = cargos.Select(m => new { m.Id, m.Descricao }),
                especializacoes = especializacoes.Select(m => new { m.Id, m.Descricao }).ToJson()
            });
        }

        public ActionResult ListarCargos(int idEspecializacaoArea)
        {
            var cargos = new Cargo { IdEspecializacaoArea = idEspecializacaoArea }.SelecionarLista();
            return Json(new { success = true, cargos = cargos.Select(m => new { m.Id, m.Descricao }).ToJson() });
        }

        private void PreencherViewBag(int? idCargo = null)
        {
            var areas = new Area().SelectAllActive<Area>().OrderBy(m => m.Descricao);
            IEnumerable<EspecializacaoArea> especializacaoAreas;
            IEnumerable<Cargo> cargos;
            Cargo cargo;

            if (idCargo.HasValue && idCargo > 0)
            {
                cargo = new Cargo().SelectById<Cargo>(idCargo.Value);
                cargos = new Cargo { IdEspecializacaoArea = cargo.IdEspecializacaoArea }.SelecionarLista();
                especializacaoAreas = new EspecializacaoArea { IdArea = cargo.EspecializacaoArea.IdArea }.SelecionarLista();
            }
            else
            {
                especializacaoAreas = new EspecializacaoArea { IdArea = areas.First().Id }.SelecionarLista();
                cargos = new Cargo { IdEspecializacaoArea = especializacaoAreas.First().Id }.SelecionarLista();
                cargo = cargos.First();
            }

            ViewBag.Cargos = cargos.ToSelectList(x => x.Descricao, x => x.Id.ToString(), cargo.Id.ToString());
            ViewBag.Areas = areas.ToSelectList(x => x.Descricao, x => x.Id.ToString(), cargo.EspecializacaoArea.IdArea.ToString());
            ViewBag.EspecializacaoAreas = especializacaoAreas.ToSelectList(x => x.Descricao, x => x.Id.ToString(), cargo.IdEspecializacaoArea.ToString());
        }
    }
}
